#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

/*
进程退出的5种方式：
    正常的终止：
        1. main函数的自然返回
        2. 调用exit函数
        3. 调用_exit函数
    非正常的终止：
        4. 调用abort函数
        5. 接收到能导致进程终止的信号：ctrl+c SIGINT ctrl+\ SIGQUIT
*/


// exit函数和_exit函数的最大区别在于exit函数在退出之前会检查文件的打开情况，
// 把文件缓冲区中的内容写回文件，就是图中的“清理I/O缓冲”。

void exit_op()
{
    printf("Using exit...\n");
    printf("This is the content in buffer");
    exit(0);

    // 可以发现，调用exit函数，缓冲区中的记录也能正常输出。
}

void _exit_op()
{
    printf("Using exit...\n");
    printf("This is the content in buffer");
    _exit(0);

    // 可以发现，最后的输出结果没有This is the content in buffer，
    // 说明_exit函数无法输出缓冲区中的记录。
}

int main()
{
    exit_op();
    /* _exit_op(); */
}
